package gof_003_行为型_Behavioral.gof_005_责任链_ChainOfResponsibility.gof_004_Chain;

/**
 * 商家
 */
public class Role_Business implements Role_Takeout {
    private int status;

    public Role_Business(int status) {
        this.status = status;
        switch (status) {
            case 4:
                makeFood();
                break;
            case 12:
                userRefund();
                break;
            default:
                break;
        }
    }


    /**
     * 制作食物
     */
    private void makeFood() {
        System.out.println("商家接单...");
        Utils.sleep(1);


        /**
         * 等待用户是否退款
         * 实际工作中,可能通过轮询|事件触发等手段完成。
         * demo级别也可以使用多线程的方式,使用用户线程来修改商家线程的值,来模拟用户中途发起退款
         * 这里仅仅为学习释责任链模式,所以使用串行的方式,等待用户3秒,超时不可退
         */
        int i = 3;
        while (i > 0) {
            System.out.println("等待用户是否退款! " + i);
            Utils.sleep(1);

            i--;
        }

        int scanner = Utils.scanner("模拟用户是否发起退款![1]不退款\t[2]发起退款");
        if (scanner == 1) {
            System.out.println("用户不退款。继续按照正常流程");
            Utils.sleep(1);

            System.out.println("师傅正在制作食物...");
            Utils.sleep(1);


            //骑手接单
            new Role_Rider(5);
        } else if (scanner == 2) {

            new Role_Business(12);
        }
    }


    /**
     * ################################ 分割线 ################################
     */
    /**
     * 是否同意用户退款
     */
    private void userRefund() {
        int scanner = Utils.scanner("模拟商家是否同意用户退款![1]拒绝\t[2]同意");

        if(scanner == 1){
            System.out.println("商家食品已经做好,拒绝退款!");
            Utils.sleep(1);

            new Role_Rider(5);
        }else if(scanner == 2){
            System.out.println("商家同意退款!");
            Utils.sleep(1);

            new Role_MeiTuan(7);
        }
    }


    /**
     * ################################ 分割线 ################################
     */
}
